/****
 * @author yangqian
 * @date 2022-02-17
 * @description 进行路由组件配置定义和路由拦截、路由插件全局
 */

// 路由插件注册
import Vue from 'vue'
import Router from 'vue-router'
import store from '../store'

Vue.use(Router)

import NotFound from '../views/common/NotFound'
import Login from '../views/login'
import Register from '../views/login/Register.vue'
import Home from '../views/home'
import Types from '../views/types'
import Cart from '../views/cart'
import Me from '../views/me'


// 路由实例化 和路由模式指定 路由配置
const meta = {noLogin: true}
const router = new Router({
    mode:'history',

    // 路由配置
    routes: [
        // 默认路由
        {path: '/', redirect: '/login'},

        // 正常页面路由
        {path: '/login', component: Login, meta},
        {path: '/register', component: Register, meta: {noLogin: true}},
        {path: '/home', component: Home},
        {path: '/types', component: Types},
        {path: '/cart', component: Cart},
        {path: '/me', component: Me},

        // 如果用户输入了一个不存在的地址，如何处理？-- 所有的路由都没有匹配上，那么这个就是最后的选择
        {path: '*', component: NotFound, meta: {noLogin: true}}
    ]
})


// 做用户登录拦截 -- beforeEach函数接收的是一个路由拦截回调方法
router.beforeEach(function(to, from, next) {

    // 判断要去的页面是否需要登录 -- 取meta值
    let noLogin = to.meta.noLogin
    // 如果不需要登录，那么直接跳转业务
    if (noLogin) {
        next()
    } else {
        // let token = sessionStorage.getItem('token')
        const token = store.getters['common/getToken']
        
        // 如果存在则执行跳转业务，否则重定向到登录页面--/login
        if (!!token) {
            next()
        } else {
            // 执行重定向
            next('/login')
        }
    }
})

export default router